#pragma once

#include <string>
#include <fstream>
#include <sstream>
#include <iostream>
#include <GL/glew.h>
#include <glm/glm.hpp>
#include <glm/gtc/type_ptr.hpp>
using std::string;

class Shader
{
public:
    // the program ID
    GLuint _programId;

    // constructor reads and builds the shader
    Shader(string vertexFilename, string fragmentFilename);
    // use/activate the shader
    void use();
    void unuse();
    // utility uniform functions
    void setBool(const std::string& name, bool value) const;
    void setInt(const std::string& name, int value) const;
    void setFloat(const std::string& name, float value) const;
    void setMat4(const std::string& name,const glm::mat4& mat4) const;
    void setVec3(const std::string& name, const glm::vec3& v3) const;
    void setVec4(const std::string& name, const glm::vec4& v4) const;
};

